package fr.adfm.managedbean;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;

import org.primefaces.event.FlowEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import fr.adfm.dto.AdresseDto;
import fr.adfm.dto.ArticlePanierDto;
import fr.adfm.dto.PanierDto;
import fr.adfm.service.facade.Facade;

@Component("commande")
@Scope("request")
public class CommandeCtrl implements Serializable {
	private static final long serialVersionUID = 1L; 
	      
    public String onFlowProcess(FlowEvent event) {    
            return event.getNewStep();   
    }  
    
	@Autowired
	Facade facade;
	
	@Autowired
	private SessionManager sessionManager;
	
	
    // --------- Bean Business panier ---------------------
	
	public PanierDto getPanier() {
		return sessionManager.getPanier();
	}
	
	public ArticlePanierDto[] getAllArticlePanier(){
		Collection<ArticlePanierDto> articles =  getPanier().getArticles();
		return articles.toArray(new ArticlePanierDto[articles.size()]);
	}
	
	private int val;

	public int getVal() {
		return val;
	}
	public void setVal(int val) {
		this.val = val;
	}

	// ---------Bean Business Data Adresse Livraison----------
	private AdresseDto adresseLivraison = new AdresseDto();

	public AdresseDto getAdresseLivraison() {
		return adresseLivraison;
	}

	public void setAdresseLivraison(AdresseDto adresseLivraison) {
		this.adresseLivraison = adresseLivraison;
	}
	
	public void validateAdresse(FacesContext context, UIComponent component, Object value) {

		String rs = "";
		String prenom = "";
		String nom ="";
		Object val;
		for(UIComponent c : component.getParent().getChildren()){
			if(c.getId().equals("nom")){
				val = ((UIInput) c).getLocalValue();
				if(val != null) nom = val.toString().trim();
				continue;
			}
			if(c.getId().equals("prenom")){
				val = ((UIInput) c).getLocalValue();
				if(val != null) prenom = val.toString().trim();
				continue;
			}
			if(c.getId().equals("rs")){
				val = ((UIInput) c).getLocalValue();
				if(val != null) rs = val.toString().trim();
				continue;
			}
		}	
		if((nom.length() + rs.length()) == 0){
			throw new ValidatorException(new FacesMessage("Nom ou Raison sociale non renseign�"));			
		}

	}

	 // ---------Bean Business Data Mode Livraison----------
	private int optionModeLivraison = 1;

	public int getOptionModeLivraison() {
		return optionModeLivraison;
	}

	public void setOptionModeLivraison(int optionModeLivraison) {
		this.optionModeLivraison = optionModeLivraison;
	}   
	
	public double getFraisDePort(){
		return (optionModeLivraison == 1) ? 2.0 : 5.0;
	}
	
	// ---------Bean Business Data commande----------
	public double getPrixPanier()
	{
		return getPanier().getPrix();
	}

	public double getTotalCommande()
	{
		Collection<ArticlePanierDto> articles =  getPanier().getArticles();
		return getPanier().getPrix() + getFraisDePort();
	}
	
	public String create() {
		getPanier().getArticles().clear();
		return "liste_ventesprivees";
	}
}
